#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

namespace my {
    typedef long long ll;
    const int maxn=200000, size=524288, mods=998244353;

    ll fact[maxn+1], invf[maxn+1], pow2[maxn+1];

    ll qpower(ll a, int n) {
        ll s=1;
        for (; n; n/=2) {
            if (n&1) s=s*a%mods;
            a=a*a%mods;
        }
        return s;
    }

    ll invsize=qpower(size, mods-2);

    void initFact(int n) {
        fact[0] = 1;
        for (int i=1; i<=n; i++) fact[i]=fact[i-1]*i%mods;
        invf[n] = qpower(fact[n], mods-2);
        for (int i=n; i; i--) invf[i-1]=invf[i]*i%mods;
    }

    void initPow(int n) {
        pow2[0] = 1;
        for (int i=1; i<=n; i++) pow2[i] = pow2[i-1]*2%mods;
    }

    ll c(int m, int n) {return fact[m]*invf[n]%mods*invf[m-n]%mods;}

    ll getW(int n) {
        const int g=3;
        return qpower(g, (mods-1)/n);
    }

    void ntt(ll a[], int n, bool inv) {
        static int pos[size];
        int l=0;
        for (; (1<<l)<n; l++);
        l--;
        for (int i=1; i<n; i++) {
            pos[i] = (pos[i>>1]>>1)|((i&1)<<l);
            if (i<pos[i]) swap(a[i], a[pos[i]]);
        }

        for (int len=1; len<n; len*=2) {
            ll t=getW(len*2);
            if (inv) t=qpower(t, mods-2);
            for (int i=0; i<n; i+=len*2) {
                ll w=1, x, y;
                for (int j=0; j<len; j++) {
                    x=a[i+j], y=a[i+len+j]*w%mods;
                    a[i+j] = (x+y)%mods;
                    a[i+len+j] = (x+mods-y)%mods;
                    w=w*t%mods;
                }
            }
        }
    }

    int main() {
        freopen("fight.in", "r", stdin);
        freopen("fight.out", "w", stdout);

        int n, k;
        scanf("%d %d", &n, &k);

        initFact(maxn);
        initPow(maxn);
        static ll a[size], b[size], g[size], f[size];
        for (int i=0; i<=n; i++) {
            if (i) a[i] = pow2[i]*invf[i]%mods*invf[i-1]%mods;
            if (i<n) b[i] = (mods+fact[n-i-1]*invf[i]%mods*(i%2 ? -1 : 1))%mods;
        }
        ntt(a, size, false);
        ntt(b, size, false);
        for (int i=0; i<size; i++) g[i] = a[i]*b[i]%mods;
        ntt(g, size, true);
        for (int i=0; i<size; i++) g[i] = g[i]*invsize%mods;
        for (int i=0; i<=n; i++) g[i]=g[i]*fact[i]%mods*fact[i]%mods*fact[n-i]%mods;
        g[n] = (g[n]+(n%2 ? -1 : 1)+mods)%mods;

        for (int i=0; i<n; i++) g[i]=g[i+1]*fact[i]%mods*invf[n-1-i]%mods*invf[i]%mods;
        for (int i=n; i<size; i++) g[i]=0;
        memset(a, 0, sizeof a);
        for (int i=0; i<n; i++) a[i]=(mods+(i%2 ? -1 : 1)*invf[i])%mods;

        ntt(g, size, false);
        ntt(a, size, false);
        for (int i=0; i<size; i++) f[i]=g[i]*a[i]%mods;
        ntt(f, size, true);
        for (int i=0; i<size; i++) f[i]=f[i]*invsize%mods;

        for (int i=0; i<n; i++) f[i]=f[i]*invf[n-1-i]%mods;
        ll ans=0;
        for (int i=0; i<=k && i<n; i++) ans = (ans+f[i])%mods;
        printf("%lld\n", ans);

        fclose(stdin);
        fclose(stdout);
        return 0;
    }
};

int main() {return my::main();}
